package com.demo.algorithms.redis;

import org.redisson.Redisson;
import org.redisson.api.RBloomFilter;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;

/**
 * @author: 蔡奇峰
 * @date: 2020/7/11 10:54
 **/
public class RedisBloomDemo {

    public static void main(String[] args) {
        // redisson配置
        Config config = new Config();
        // redis地址
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        // redis默认没有密码

        // 构造Redisson
        RedissonClient redisson = Redisson.create(config);

        RBloomFilter<String> bloomFilter = redisson.getBloomFilter("phones");
        // 初始化布隆过滤器：预计元素为100000000L,误差率为3%
        bloomFilter.tryInit(100000000L,0.03);
        // 将号码10086插入到布隆过滤器中
        bloomFilter.add("10086");

        // 判断下面号码是否在布隆过滤器中
        System.out.println("存在123456 ？" + bloomFilter.contains("123456"));// false
        System.out.println("存在10086 ？" + bloomFilter.contains("10086"));// true

        // 关闭redisson
        redisson.shutdown();
    }


    /**
     * redisson实现分布式锁
     */
   public void redissonLock(){
       // redisson配置
       Config config = new Config();
       // redis地址
       config.useSingleServer().setAddress("redis://127.0.0.1:6379");
       // redis默认没有密码

       // 构造Redisson
       RedissonClient redisson = Redisson.create(config);

       RLock lock = redisson.getLock("lock");

       lock.lock();
       try {
           //
       }finally {
           // 释放锁
           lock.unlock();
       }

   }



}
